

/*
消息总线
*/

#ifndef __MESSAGE_BUS_H__
#define __MESSAGE_BUS_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "MessageDefine.h"

//初始化
void MsgBus_Init(void);
void MsgBus_Deinit(void);

//发送消息，指定接收者
int MsgBus_Send(Message_T* msg);
int MsgBus_SendData(MsgBusAddr_T dest, MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, void *data);
int MsgBus_DynamicSend(MsgBusAddr_T dest, MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, void const *data, uint32_t size);
int MsgBus_SendVal(MsgBusAddr_T dest, MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, uint32_t val);


//发布消息，不指定接收者，所有订阅这个消息的都可以接收到这个消息。
int MsgBus_Publish(Message_T* msg);
int MsgBus_PublishData(MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, void *data);
int MsgBus_DynamicPublish(MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, void const *data, uint32_t size);
int MsgBus_PublishVal(MsgBusAddr_T src, MsgType_T type, MsgAttr_T attr, uint32_t val);
//订阅消息
void MsgBus_Subscribe(MsgType_T type, MsgBusAddr_T addr);
void MsgBus_Unsubscritbe(MsgType_T type, MsgBusAddr_T addr);

//注册
void MsgBus_Register(MsgBusAddr_T addr, MsgHandler_T handler);
void MsgBus_Unregister(MsgBusAddr_T addr);

//分发消息
void MsgBus_Dispatch(int ms);

#ifdef __cplusplus
}
#endif

#endif



